package com.zanglikun.ApacheCommonUtil.ApacheCommonCollections4;

import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.ListUtils;
import org.apache.commons.collections4.Predicate;
import org.apache.commons.collections4.Transformer;

import java.util.*;

public class CollectionUtilsTestGPT {
    public static void main(String[] args) {

        // ========== CollectionUtils API 演示 ==========

        List<String> list1 = Arrays.asList("1", "2", "3");
        List<String> list2 = Arrays.asList("2", "3", "4");
        List<String> emptyList = new ArrayList<>();

        CollectionUtils.isEmpty(list1);              // 判断集合是否为空
        CollectionUtils.isNotEmpty(list1);          // 判断集合是否不为空
        CollectionUtils.size(list1);                // 获取集合大小，安全处理null

        CollectionUtils.intersection(list1, list2); // 获取两集合交集
        CollectionUtils.union(list1, list2);        // 获取两集合并集
        CollectionUtils.subtract(list1, list2);     // 获取差集（list1 减去 list2）
        CollectionUtils.disjunction(list1, list2);  // 获取对称差集

        CollectionUtils.isEqualCollection(list1, list2);    // 判断两集合是否相等（忽略顺序）
        CollectionUtils.containsAll(list1, list2);          // 判断list1是否包含list2所有元素
        CollectionUtils.containsAny(list1, list2);          // 判断list1是否包含list2任意元素

        CollectionUtils.cardinality("2", list1);    // 统计指定元素在集合中出现次数

        // 过滤集合元素
        CollectionUtils.select(list1, new Predicate<String>() {
            public boolean evaluate(String s) {
                return s.equals("2");
            }
        });

        // 过滤掉满足条件的元素
        CollectionUtils.selectRejected(list1, new Predicate<String>() {
            public boolean evaluate(String s) {
                return s.equals("2");
            }
        });

        // 转换集合元素
        CollectionUtils.collect(list1, new Transformer<String, String>() {
            public String transform(String s) {
                return "prefix_" + s;
            }
        });

        CollectionUtils.addAll(emptyList, new String[]{"a", "b"}); // 批量添加数组元素到集合
        CollectionUtils.isEmpty(null);              // 安全判断null集合


        // ========== ListUtils API 演示 ==========

        List<Integer> bigList = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);
        List<String> listA = Arrays.asList("a", "b", "c");
        List<String> listB = Arrays.asList("b", "c", "d");

        ListUtils.partition(bigList, 3);            // 将列表按指定大小分割成多个子列表
        ListUtils.union(listA, listB);              // 合并两个列表（去重）
        ListUtils.intersection(listA, listB);       // 获取两列表交集
        ListUtils.subtract(listA, listB);           // 获取列表差集
        ListUtils.sum(listA, listB);                // 连接两个列表（不去重）

        ListUtils.isEqualList(listA, listB);        // 判断两列表是否完全相等（考虑顺序）
        ListUtils.longestCommonSubsequence(listA, listB); // 获取最长公共子序列

        ListUtils.emptyIfNull(null);                // 如果列表为null则返回空列表
        ListUtils.defaultIfNull(null, listA);       // 如果列表为null则返回默认列表

        System.out.println("API演示完成");
    }
}